package org.jeecg.common.util;

import fr.opensagres.poi.xwpf.converter.core.FileImageExtractor;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import java.io.*;

public class WordToHtmlConverter {

    /**
     * 将Word文档转换为HTML（支持图片）
     * @param wordFilePath 输入的Word文件路径
     * @param htmlFilePath 输出的HTML文件路径
     * @param imageFolderPath 图片存储文件夹路径
     * @throws IOException 如果文件操作出错
     */
    public static void convertWordToHtml(String wordFilePath, String htmlFilePath, String imageFolderPath) throws IOException {
        // 创建图片存储文件夹
        File imageFolder = new File(imageFolderPath);
        if (!imageFolder.exists()) {
            imageFolder.mkdirs();
        }

        // 加载Word文档
        try (InputStream in = new FileInputStream(wordFilePath);
             XWPFDocument document = new XWPFDocument(in)) {

            // 设置XHTML选项（包括图片提取器）
            XHTMLOptions options = XHTMLOptions.create();
            options.setExtractor(new FileImageExtractor(imageFolder));
            options.setIgnoreStylesIfUnused(false);
            options.setFragment(true);

            // 创建输出流
            try (OutputStream out = new FileOutputStream(htmlFilePath)) {
                // 执行转换
                XHTMLConverter.getInstance().convert(document, out, options);
            }
        }
    }

    public static void main(String[] args) {
        try {
            // 示例用法
            String wordFile = "d:/word/（无修改建议）56 朱海滨+我是如何打造活力校园的？.docx";
            String htmlFile = "d:/html/朱海滨+我是如何打造活力校园的？.html";
            long startTime = System.currentTimeMillis();
            String imageFolder = "d:/images/" + startTime + "/";

            convertWordToHtml(wordFile, htmlFile, imageFolder);
            System.out.println("转换完成！HTML文件已保存到: " + htmlFile);
            System.out.println("图片已保存到文件夹: " + imageFolder);
        } catch (IOException e) {
            System.err.println("转换过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}